package demo;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2023-04-08
 * Time: 15:37
 */

public class Singleton1 {
    //静态内部类创建单例模式的懒汉模式
    private static volatile Singleton1 instance;

    //写一个静态内部类 在该类当中创建一个静态熟悉感
    private static class SingletonInstance{
        private static final Singleton1 INSTANCE = new Singleton1();
    }

    //提供一个静态方法获取
    public static Singleton1 getInstance(){
        return SingletonInstance.INSTANCE;
    }

    /**
     * 静态内部类的方法 采用了类装载机制来保证了初始化实例只有一个线程
     * 而且静态内部类在Singleton类被装载的时候 不会立即实例化 而是在需要的时候进行实例化
     * 在调用getInstance方法 才会装载SingletonInstance类 从而完成Singleton实例化
     * 类的静态属性只会在第一次加载类的时候初始化 所以JVM帮助我们保证了线程安全的性 在类初始化的时候 别的线程无法进入
     * 优点 避免了线程不安全 利用静态内部类特点实现延迟加载 效率高
     */
}
